package com.yfp.org.service;


import cn.hutool.core.date.DateTime;
import com.yfp.common.core.domain.R;
import com.yfp.org.domain.dto.*;
import com.yfp.org.domain.entity.ComboInfo;
import com.yfp.org.domain.entity.OrderList;
import com.yfp.org.domain.entity.Tag;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 订单表(OrderList)表服务接口
 *
 *
 * @since 2023-12-28 16:07:28
 */
public interface OrderListService {

    /**
     * 通过ID查询单条数据
     *
     * @param orderSn 主键
     * @return 实例对象
     */
    HashMap queryById(String orderSn);

    /**
     * 分页查询
     *
     * @param orderList 筛选条件
     * @return 查询结果
     */
    List<OrderList> queryByPage(OrderList orderList);

    /**
     * 设备订单
     * @param orderList
     * @return
     */
    List<OrderList> getDeviceOrder(OrderList orderList);

    /**
     * 新增数据
     *
     * @param orderList 实例对象
     * @return 实例对象
     */
    OrderList insert(OrderList orderList);

    /**
     * 修改数据
     *
     * @param orderList 实例对象
     * @return 实例对象
     */
    R update(OrderList orderList);

    R updateException(OrderList orderList);

    void refund(OrderRefundDTO orderRefundDTO);

    void refundBatch(List<OrderRefundDTO> orderRefundDTOS);

    List<Tag> tagStatistics(Date startTime, Date endTime);

    List<ComboInfo> comboStatistics(Date startTime, Date endTime, String cityName);

    R calculate(String orderId);

    /**
     * 点位销售排行
     *
     * @return
     */
    List<SalesRankingDTO> salesRanking();

    /**
     * 实时销售情况额
     *
     * @return
     */
    BigDecimal salesRealtime();

    /**
     * 销售走势分析
     *
     * @return
     */
    List<SalesTrendsDTO> salesTrends(DateTime lastStartOfWeek, DateTime endOfWeek);

    /**
     * 产品销量排行Top10
     *
     * @return
     */
    List<ProductsTopSalesDTO> productsTopSales();

    /**
     * 客源分析统计
     *
     * @return
     */
    OrderTypeDTO getOrderTypeCount();

    /**
     * 导出
     * @param orderList
     * @return
     */
    List<OrderList> derive(OrderList orderList);

    /**
     * 导出设备订单
     * @param orderList
     * @return
     */
    List<OrderList> exportDevOrderList(OrderList orderList);
}
